#pragma once

#include "..\Shape\HkpShape.h"
#include "..\..\..\Common\HkIncludes.h"

using namespace System;
using namespace System::Collections::Generic;
using namespace Microsoft::Xna::Framework;
using namespace Microsoft::Xna::Framework::Graphics;
using namespace Havok::Utilities;

namespace Havok
{
	namespace Collision
	{
		// No need to show this on the outside ..
		//hkpShape* createBoxShape(float extents[]);
		//hkpShape* createSphereShape(float radius);
		//hkpShape* createTriangleShape(float vertexA[], float vertexB[], float vertexC[]);
		//hkpShape* createCapsuleShape(float vertexA[], float vertexB[], float radius);
		//hkpShape* createCylinderShape(float vertexA[], float vertexB[], float radius);
		//void createMeshPart(float vertexBuffer[], int numVertices, int indexBuffer[], int numIndices, hkpExtendedMeshShape* shape);
		//void createMeshPart(float vertexBuffer[], int numVertices, short indexBuffer[], int numIndices, hkpExtendedMeshShape* shape);

		public ref class HkpShapeFactory
		{
		public:
			
			static HkpShape^ CreateBox(Vector3 extents);
			static HkpShape^ CreateSphere(float radius);
			static HkpShape^ CreateTriangle(Vector3 vertexA, Vector3 vertexB, Vector3 vertexC);
			static HkpShape^ CreateCapsule(Vector3 vertexA, Vector3 vertexB, float radius);
			static HkpShape^ CreateCylinder(Vector3 vertexA, Vector3 vertexB, float radius);

			static HkpShape^ CreateTriangleMesh(Model^ model)
			{
				return CreateTriangleMesh(model, true);
			}
			static HkpShape^ CreateTriangleMesh(Model^ model, bool useBones);
			static HkpShape^ CreateMoppBvTreeForMesh(HkpShape^ meshShape);
		};
	}
}
